跳到主要内容

多域试验

本节将介绍 DHCP 的单作用域、超级作用域和 DHCP 中继等场景下的部署方式,并带有实验环境。

环境准备

在开始前,我们需要准备实验所用到的主机。

这里为您准备了 Vagrant 环境,可以一键启动如下环境

新建目录中创建如下 Vagrantfile 文件,然后在此目录中执行 vagrant up 即可启动练习环境。关于 Vagrant 更多使用方法详见:Vagrant

启动后使用 vagrant ssh <host_name> 登录到对环境的各个节点。

此环境已经配置好了各个节点之间的路由,开箱即用。

Vagrant 环境配置文件:

Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/lunar64"
config.vm.provider "virtualbox" do |vb|
vb.memory = 512
vb.cpus = 1
end
# Route
config.vm.define "route" do |route|
route.vm.hostname = "route"
route.vm.network "private_network", ip: "10.0.10.254"
route.vm.network "private_network", ip: "10.0.20.254"
route.vm.provision "shell", inline: <<-SHELL
sudo ip route add 192.168.10.0/24 via 10.0.10.10
sudo ip route add 192.168.20.0/24 via 10.0.10.10
sudo ip route add 192.168.30.0/24 via 10.0.20.10
sudo sh -c ' echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf' && sudo sysctl -p
SHELL
end
# DHCP server
config.vm.define "dhcp_server" do |dhcp_server|
dhcp_server.vm.hostname = "dhcp-server"
dhcp_server.vm.network "private_network", ip: "10.0.10.10"
dhcp_server.vm.network "private_network", ip: "192.168.0.0", auto_config: false
dhcp_server.vm.provision "shell", inline: <<-SHELL
sudo ip addr add 192.168.10.254/24 dev enp0s9
sudo ip addr add 192.168.20.254/24 dev enp0s9
sudo ip link set enp0s9 up
sudo ip route add 192.168.10.0/24 via 192.168.10.254
sudo ip route add 192.168.20.0/24 via 192.168.20.254
sudo ip route add 192.168.30.0/24 via 10.0.10.254
sudo sh -c 'echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf' && sudo sysctl -p
SHELL
end
# DHCP relay
config.vm.define "dhcp_relay" do |dhcp_relay|
dhcp_relay.vm.hostname = "dhcp-relay"
dhcp_relay.vm.network "private_network", ip: "10.0.20.10"
dhcp_relay.vm.network "private_network", ip: "192.168.30.254"
dhcp_relay.vm.provision "shell", inline: <<-SHELL
sudo ip route add 192.168.0.0/16 via 10.0.20.254
sudo sh -c ' echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf' && sudo sysctl -p
SHELL
end
# DHCP client
config.vm.define "client1" do |client1|
client1.vm.hostname = "client1"
client1.vm.network "private_network", ip: "192.168.0.0", auto_config: false
client1.vm.provision "shell", inline: <<-SHELL
sudo ip addr add 192.168.10.10/24 dev enp0s8
sudo ip link set enp0s8 up
sudo ip route add 192.168.0.0/16 via 192.168.10.254
SHELL
end
# DHCP client configuration
config.vm.define "client2" do |client2|
client2.vm.hostname = "client2"
client2.vm.network "private_network", ip: "192.168.0.0", auto_config: false
client2.vm.provision "shell", inline: <<-SHELL
sudo ip addr add 192.168.20.10/24 dev enp0s8
sudo ip link set enp0s8 up
sudo ip route add 192.168.0.0/16 via 192.168.20.254
SHELL
end
config.vm.define "client3" do |client3|
client3.vm.hostname = "client3"
client3.vm.network "private_network", ip: "192.168.30.10"
client3.vm.provision "shell", inline: <<-SHELL
sudo ip route add 192.168.10.0/24 via 192.168.30.254
sudo ip route add 192.168.20.0/24 via 192.168.30.254
SHELL
end
end

DHCP 拓扑

sudo apt-get update
sudo apt-get install isc-dhcp-server
sudo apt-get install isc-dhcp-relay

/etc/dhcp/dhcpd.conf
/etc/sysconfig/dhcrelay
/etc/default/isc-dhcp-relay

/usr/share/doc/isc-dhcp-server/

单作用域

什么是单作用域 单作用域的优缺点

如何配置单作用域

静态 IP 地址分配

sudo dhclient eth0

  • 手动分配:特定的 IP 地址由管理员预先分配给单个设备。DHCP 仅将 IP 地址传送给设备。
  • 自动分配: DHCP 自动为设备永久分配一个 IP 地址,从可用地址池中选择它。
  • 动态分配: DHCP 在服务器选择的有限时间内从地址池中分配一个 IP 地址,或者直到客户端告诉 DHCP 服务器它不再需要该地址。 http://www.tcpipguide.com/free/t_DHCPAddressAssignmentandAllocationMechanisms.htm

编辑 ISC DHCP 服务器的配置文件/etc/dhcp/dhcpd.conf,添加以下内容: netplan status sudo vi /etc/dhcp/dhcpd.conf

# 设置DHCP服务器的名称和域名
option domain-name example.com;
option domain-name-servers 8.8.8.8,114.114.114.114;
#option ntp-servers 192.168.10.254; (转发)
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;

subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.10 192.168.10.100;
option routers 192.168.1.254;
option broadcast-address 192.168.10.255;

}

host client1 {
hardware ethernet 08:00:27:a3:10:ae;
fixed-address 192.168.10.5;
}

sudo systemctl enable --now isc-dhcp-server


客户端重新获取ip
暂停网络服务
sudo systemctl stop NetworkManager
释放当前IP地址
sudo dhclient -r eth0
注:如果你的网卡接口不是 eth0,需要替换为你实际的网卡接口名称。

请求新的IP地址
sudo dhclient eth0
重新启动网络服务
sudo systemctl start NetworkManager

停掉NetworkManager是为了防止它在重新获取IP地址时发生冲突。通常情况下,NetworkManager会管理网卡的配置信息,并且在系统启动时自动启动。如果在获取IP地址时不停掉NetworkManager,可能会导致获取的新IP地址无法生效,或者新的IP地址与之前的IP地址发生冲突。因此,在重新获取IP地址时,暂停NetworkManager可以确保获取的新IP地址能够被正确识别和使用。重新获取IP地址完成后,再启动NetworkManager以确保网络正常运行。
##

这里配置了一个子网为 192.168.1.0/24 的 DHCP 服务器,分配的 IP 地址范围是 192.168.1.10 - 192.168.1.50,默认网关是 192.168.1.1,DNS 服务器是 Google 的公共 DNS。

其中,option routers 指定了网关地址,option domain-name-servers 指定了 DNS 服务器地址。

配置网络接口:

编辑网络接口的配置文件/etc/network/interfaces,将 DHCP 服务器的 IP 地址绑定到网络接口上:

auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255

以上配置表示网络接口 eth0 使用静态 IP 地址 192.168.1.1,并设置子网掩码为 255.255.255.0,广播地址为 192.168.1.255。

单作用域、超级作用域和 dhcp 中继

【进阶—超级作用域】

目的:为不同段的网络做 DHCP 功能,使用一块网卡为不同网络进行路由和 dhcp 分配 ip

Centos 6.8 三台 分别为 DHCP Server(route)、Client1、Client2

实验步骤

1、关闭防火墙、Senlinux、虚拟机的网卡这几步跟第一个实验相同

2、在DHCP服务器上开启子网卡;复制网卡的配置文件即可
在子网卡的配置文件中,不需要删除MAC、UID,因为这是一个子网卡,只需修改一下IP即可

开启 DHCP 服务器的路由转发功能并使其生效

[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296


net.ipv4.ip_forward = 1
该参数允许系统作为路由器,转发其它机器发送过来的IP数据包。

net.ipv4.conf.default.rp_filter = 1
该参数用于防止IP欺骗攻击,当一个接收网卡收到数据包时,如果目标IP地址与路由表条目不一致,就会将该数据包丢弃。

net.ipv4.conf.default.accept_source_route = 0
该参数用于防止IP源路由攻击,当一个接收网卡收到数据包时,如果数据包中包含源路由选项,就会将该数据包丢弃。

kernel.sysrq = 0
该参数用于关闭SysRq快捷键功能,这是一个紧急系统操作的快捷键,可以控制系统的重启/挂起/重定向终端等操作,但它也可以被黑客用来进行攻击,关闭这个功能可以增加系统的安全性。

kernel.core_uses_pid = 1
该参数用于创建程序核心转储文件时,使用进程ID作为文件名的一部分,以便于识别和追踪问题。

net.ipv4.tcp_syncookies = 1
该参数用于防止SYN洪水攻击,启用该参数后,当系统同时收到大量的连接请求时,可以使系统响应更快,并降低系统因攻击而崩溃的风险。

kernel.msgmnb = 65536
该参数用于调整IPC消息的内核缓存大小,这可以提高进程间通信的性能。

kernel.msgmax = 65536
该参数用于调整IPC消息的大小限制。

kernel.shmmax = 68719476736
该参数用于调整共享内存段的最大尺寸,这可以提高进程间通信的性能。

kernel.shmall = 4294967296
该参数用于调整共享内存段的最大数量,这可以提高进程间通信的性能。

3、修改 dhcp 主配置文件

多域案例

【高级—DHCP 中继】 DHCP 中继被称为 DHCP Relay;是为了实现不同子网和物理网段之间处理和转发 dhcp 信息 DHCP Relay 是一个网络协议,它可以将 DHCP 请求从一个网络中转到另一个网络上的 DHCP 服务器。在 Linux 上,可以使用 dhcrelay 命令来配置 DHCP Relay。

Centos 6.8 四台 分别为 DHCP Server、DHCP 中继、Client1、Client2

server 192.168.10.0/24 client1 192.168.10.0/24 client2 192.168.20.0/24 Relay&Route 且为网关

安装 dhcp-relay 软件包。在 Ubuntu 上,可以使用以下命令安装它:

sudo apt-get install dhcp-relay

安装 dhcp-relay 软件包。在 CentOS 上,可以使用以下命令安装:

sudo yum install dhcp-relay
cat /etc/default/isc-dhcp-relay

配置 DHCP

4、配置 DHCP 中继服务器 编辑 /etc/default/dhcp-relay 文件,并指定 DHCP 服务器的 IP 地址和需要中转的网络接口。例如,如果 DHCP 服务器的 IP 地址是 192.168.1.1,需要中转的网络接口是 eth0,则可以将以下行添加到 /etc/default/dhcp-relay 文件中:

DHCPD_SERVERS=192.168.1.1
INTERFACES=eth0

如果要中继多个 DHCP 服务器,可以使用逗号分隔它们的 IP 地址。

3.编辑 /etc/dhcp/dhcrelay.conf 文件,并指定需要中转的 DHCP 子网。例如,如果需要中转的 DHCP 子网是 192.168.2.0/24,则可以将以下行添加到 /etc/dhcp/dhcrelay.conf 文件中:

relay 192.168.2.0/24
配置网卡
eth0:192.168.10.20
eth1:100.100.100.20

vim /etc/sysconfig/dhcrelay
将自己的两个网卡接口与DHCP服务器的IP地址标明
# 开启路由转发并使其生效
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
# 开启中继服务
sudo service isc-dhcp-relay start
sudo systemctl enable --now dhcp-relay

完成上述步骤后,DHCP 请求将被转发到指定的 DHCP 服务器上。您可以使用 tcpdump 命令来检查是否已正确配置 DHCP Relay。

超级作用域

什么是超级作用域! 超级作用域的优缺点

如何配置超级作用域

DHCP 中继

什么是 DHCP 中继 DHCP 中继的优缺点

如何配置 DHCP 中继